#include <iostream>
#include <vector>
#include <string>
#include <sstream>
#include <algorithm>
using namespace std;

// 用户需要实现的核心函数（占位符）
{{CORE_CODE}}

// 辅助函数：解析输入字符串为整数数组（如 "[2,3,6,7]" -> [2,3,6,7]）
vector<int> parseArray(const string& input) {
    vector<int> result;
    if (input.empty() || input == "[]") return result;
    // 去除首尾的方括号
    string numsStr = input.substr(1, input.size() - 2);
    stringstream ss(numsStr);
    string num;
    // 按逗号分割并转换为整数
    while (getline(ss, num, ',')) {
        if (!num.empty()) {
            // 处理可能的空格（如输入 "[2, 3, 6]" 中的空格）
            num.erase(remove_if(num.begin(), num.end(), ::isspace), num.end());
            result.push_back(stoi(num));
        }
    }
    return result;
}

// 辅助函数：打印组合列表（按LeetCode格式输出，如 [[2,2,3],[7]]）
void printCombinations(const vector<vector<int>>& combinations) {
    cout << "[";
    for (size_t i = 0; i < combinations.size(); ++i) {
        cout << "[";
        for (size_t j = 0; j < combinations[i].size(); ++j) {
            cout << combinations[i][j];
            if (j < combinations[i].size() - 1) {
                cout << ",";
            }
        }
        cout << "]";
        if (i < combinations.size() - 1) {
            cout << ",";
        }
    }
    cout << "]" << endl;
}

int main() {
    // 1. 读取输入（第一行为candidates数组，第二行为target）
    string candidatesInput;
    getline(cin, candidatesInput);  // 如："[2,3,6,7]"
    int target;
    cin >> target;  // 如：7

    // 2. 解析输入为数组
    vector<int> candidates = parseArray(candidatesInput);

    // 3. 调用用户实现的函数计算组合
    vector<vector<int>> result = combinationSum(candidates, target);

    // 4. 按格式输出结果
    printCombinations(result);

    return 0;
}